<?php

class ErrorController extends Zend_Controller_Action
{

    public function errorAction()
    {
        $errors = $this->_getParam('error_handler');
        
        switch ($errors->type) {
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
        
                // 404 error -- controller or action not found
                $this->getResponse()->setHttpResponseCode(404);
                $this->view->message = 'The page requested is not found, please refer to your system administrator for problem resolution.';
                break;
            case 'BIS_Exception_404':
                // send 404
                $this->getResponse()->setRawHeader('HTTP/1.1 404 Not Found');
                $this->view->message = $errors->exception->getMessage();
                break;
            default:
                // application error
                $this->getResponse()->setHttpResponseCode(500);
                $this->view->message = ($errors->exception->getMessage()) ? $errors->exception->getMessage() : 'An application error has occured, please refer to your system administrator for problem resolution.';
                break;
        }
        
        // Log exception, if logger available
        $log = $this->getLog();
        if (false !== $log) {
            $log->crit($this->view->message, $errors->exception);
        }
        
        // conditionally display exceptions
        if (true == $this->getInvokeArg('displayExceptions')) {
            $this->view->exception = $errors->exception;
        }
        
        $this->view->request   = $errors->request;
    }

    public function permissionAction()
    {
        
    }

    public function getLog()
    {
         try {
                Zend_Registry::get('log');
            } catch (Zend_Exception $e) {
                return false;
            }
        return Zend_Registry::get('log');
    }

}